package cn.tedu.file;

import java.io.*;//*通配符

/*本类用于练习字节输入流InputStream*/
public class TestIn {
    public static void main(String[] args) {
        //method();//字节流的读取
        method2();//高效字节流的读取
    }
    //本方法用于测试高效字节流的读取
    private static void method2() {
        //定义一个本方法中都生效的局部变量,注意手动初始化,引用类型默认值为null
        InputStream in = null;
        try {
            in = new BufferedInputStream(new FileInputStream(new File("D:\\ready\\1.txt")));
//            in2 = new BufferedInputStream(new FileInputStream("D:\\ready\\1.txt"));
            int b;
            while((b=in.read())!=-1){
                System.out.println(b);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //本方法用于测试字节流的读取
    private static void method() {
        //创建一个在本方法中都生效的局部变量,注意手动初始化,引用类型默认值为null
        InputStream in = null;
        try {
            //创建流对象,
            // 注意InputStream是抽象父类,不可以实例化
            in= new FileInputStream(new File("D:\\ready\\1.txt"));
//            InputStream in2= new FileInputStream("D:\\ready\\1.txt");

            //使用流对象:读取指定文件中的数据
            /*read()每次调用都会读取一个字节,如果读到了文件数据的末尾,返回-1
            * 这个方法的返回值类型的int,所以会查找指定字符对应的编码打印出来*/
//            System.out.println(in.read());
//            System.out.println(in.read());
//            System.out.println(in.read());
//            System.out.println(in.read());
//            System.out.println(in.read());

            //优化代码,使用循环读取文件
            //定义变量,用来保存本次读到的数据
            int b;
            //循环读取数据,只要读到的数据不等于-1,说明还有数据,继续循环
            while((b= in.read())!=-1){
                System.out.println(b);//打印本轮读到的数据
            }
            in.close();
        } catch (Exception e) {
            e.printStackTrace();//默认写法:打印错误信息
        }finally {
            /*finally{}代码块是try-catch结构的第3个部分
            * 这部分不论是否捕获到异常,都一定会执行,所以常用来关流操作*/
            //3.释放资源,流资源用完必须释放!
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

